package com.zhiyou100.api.book_demo.dao.impl;

import com.zhiyou100.api.book_demo.dao.BaseDao;
import com.zhiyou100.api.book_demo.dao.BookInfoDao;
import com.zhiyou100.api.book_demo.pojo.BookInfo;
import com.zhiyou100.api.book_demo.pojo.Category;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;

/**
 * 操作图书信息的数据实现类
 */
public class BookInfoDaoImpl extends BaseDao implements BookInfoDao {

    //获取图书信息map对象
    HashMap<Category, List<BookInfo>> booksMap = getBooksMap();

    /**
     * 查询所有图书信息
     *
     * @return 所有图书列表
     */
    @Override
    public List<BookInfo> queryAll() {
        //获取所有图书列表
        Collection<List<BookInfo>> values = booksMap.values();
        //bookInfos用于保存所有的图书类别
        List<BookInfo> bookInfos = new ArrayList<>();
        if (!values.isEmpty()) {
            //遍历集合，将元素一一获取后封装到指定的bookInfos中
            for (List<BookInfo> list : values) {
                for (BookInfo bookInfo : list) {
                    bookInfos.add(bookInfo);
                }
            }
        }
        return bookInfos;
    }

    /**
     * 添加图书信息
     *
     * @param category 图书类别
     * @param bookInfo 图书信息
     * @return
     */
    @Override
    public boolean insertBookInfo(Category category, BookInfo bookInfo) {
        //如果图书类别存在，添加数据
        if (booksMap.containsKey(category)){
            booksMap.get(category).add(bookInfo);
            return true;
        }
        return false;
    }

    /**
     * 根据图书类别查询图书信息
     * @param category 图书类别（可以是编号，也可以是名称，或者二者都有）
     * @return 对应的图书信息列表
     */
    @Override
    public List<BookInfo> queryInfoByCategory(Category category) {
//        System.out.println(booksMap);
        //先判断此类别是否存在，如果存在，就返回对应图书信息，不存在，就null
        if (booksMap.containsKey(category)){
            return booksMap.get(category);
        }else {
            return null;
        }
    }

    /**
     * 根据图书名称查询图书信息
     *
     * @param name 图书名称
     * @return 对应的图书信息
     */
    @Override
    public BookInfo queryBookInfoByName(String name) {
        return null;
    }

    /**
     * 修改图书信息（根据图书编号）
     *
     * @param bookInfo 修改的数据
     * @return 修改结果
     */
    @Override
    public BookInfo updateBookInfoByNum(BookInfo bookInfo) {
        return null;
    }

    /**
     * 修改图书信息（根据图书名称）
     *
     * @param bookInfo 修改的数据
     * @return 修改结果
     */
    @Override
    public BookInfo updateBookInfoByName(BookInfo bookInfo) {
        return null;
    }

    /**
     * 删除图书信息
     *
     * @param num 编号
     * @return 删除返回结果
     */
    @Override
    public boolean deleteBookInfoByNum(String num) {
        return false;
    }

    /**
     * 删除图书信息
     *
     * @param name 书名
     * @return 删除返回结果
     */
    @Override
    public boolean deleteBookInfoByName(String name) {
        return false;
    }

    /**
     * 根据价格进行图书查询
     *
     * @param price 图书价格
     * @return 图书列表
     */
    @Override
    public List<BookInfo> queryBookInfoByPrice(double price) {
        return null;
    }

    /**
     * 根据价格进行图书查询
     *
     * @param from 起始价格
     * @param to   结束价格
     * @return 图书列表
     */
    @Override
    public List<BookInfo> queryBookInfoByPrice(double from, double to) {
        return null;
    }

    /**
     * 根据作者查询
     *
     * @param author 作者
     * @return 图书列表
     */
    @Override
    public List<BookInfo> queryBookInfoByAuthor(String author) {
        return null;
    }
}
